home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
language
/
xlisp_21.zoo
/
xl-004.bug
< prev
next >
Wrap
Internet Message Format
|
1990-02-28
|
2KB
From sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma Sun Sep 10 21:19:10 EDT 1989
Article: 148 of comp.lang.lisp.x
Path: cognos!sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma
From: toma@tekgvs.LABS.TEK.COM (Tom Almy)
Newsgroups: comp.lang.lisp.x
Subject: save/restore bug fixes!
Message-ID: <5886@tekgvs.LABS.TEK.COM>
Date: 6 Sep 89 13:53:17 GMT
Reply-To: toma@tekgvs.LABS.TEK.COM (Tom Almy)
Organization: Tektronix, Inc., Beaverton, OR.
Lines: 56
OK, so it was pretty schlocky of me to mention my previous fix postings
rather than posting the fixes. I was just too busy to look them up.
There is no promise that these changes will fix the problem with xscheme,
but there does seem to be numerous bugs that are in both x's.
Tom Almy
toma@tekgvs.labs.tek.com
*******************
Problem: "restore" corrupts system.
Diagnosis: argument stack not being reset -- initial garbage collect
"marks" random memory!
Solution: Add to "initialize" in xlirestore:
xlfp = xlsp = xlargstkbase;
*xlsp++ = NIL;
*******************
Problem: "restore" corrupts system with 8086 compilers.
Diagnosis: cvoptr is doing improper arithmetic.
Solution: CVPTR in xlisp.h needs to be defined as
#define CVPTR(x) ((((unsigned long)(x) >> 16) << 4) + ((unsigned) x))
return statement in cvoptr() (xlimage.c) needs to be changed from:
return (off + (OFFTYPE)((p - seg->sg_nodes) << 1));
to:
return (off+(((CVPTR(p)-CVPTR(seg->sg_nodes))/sizeof(struct node))<<1));
Note: for this to work with non-8086 compilers, the default for CVPTR
should be changed from (x) to ((OFFTYPE)(x)).
*******************
A third problem that caused more than one restore in a session to fail had
been fixed already in xscheme. For the record, though:
BUG: Any attempt to do more than one RESTORE in a session causes the error
"insufficient memory - segment".
In file xlimage.c, function freeimage(), change
if (((fp = getfile(p)) != 0) && (fp != stdin && fp != stdout))
to:
if (((fp = getfile(p)) != 0) &&
(fp != stdin && fp != stdout && fp != stderr))